const formatTime = date => {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()
    const second = date.getSeconds()

    return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
/**
 * 时间格式化  默认 YY-MM-DD hh:mm:ss
 */
function formatDate(time, format = 'YY-MM-DD hh:mm:ss') {
	var date = new Date(time);
	var year = date.getFullYear(),
		month = date.getMonth() + 1,// 月份是从0开始的
		day = date.getDate(),
		hour = date.getHours(),
		min = date.getMinutes(),
		sec = date.getSeconds();
	var preArr = Array.apply(null, Array(10)).map(function (elem, index) {
		return '0' + index;
	});// //开个长度为10的数组 格式为 00 01 02 03

	var newTime = format.replace(/YY/g, year)
		.replace(/MM/g, preArr[month] || month)
		.replace(/DD/g, preArr[day] || day)
		.replace(/hh/g, preArr[hour] || hour)
		.replace(/mm/g, preArr[min] || min)
		.replace(/ss/g, preArr[sec] || sec);

	return newTime;
}

// 秒转成 hh:mm:ss的格式
const formatSeconds = (a) => {
    var hh = parseInt(a / 3600);
    if (hh < 10) hh = "0" + hh;
    var mm = parseInt((a - hh * 3600) / 60);
    if (mm < 10) mm = "0" + mm;
    var ss = parseInt((a - hh * 3600) % 60);
    if (ss < 10) ss = "0" + ss;
    var length = hh + ":" + mm + ":" + ss;
    if (a > 0) {
        return length;
    } else {
        return "NaN";
    }
}

/**
 * 格式化null值 都转成 空字符串
 */
function formatData(data){
    if(data){
        for (var key in data) {
            if(!data[key]){
                data[key] = "";
            }
        }
    }
    return data;
}


const formatNumber = n => {
    n = n.toString()
    return n[1] ? n : '0' + n
}
/**************************************关于动画********************************* */

function showModel(_this, currentStatu, _fun) {
    /* 动画部分 */
    // 第1步：创建动画实例 
    var animation = wx.createAnimation({
        duration: 100, //动画时长
        timingFunction: "linear", //线性
        delay: 0 //0则不延迟
    });
    // 第2步：这个动画实例赋给当前的动画实例
    _this.animation = animation;
    // 第3步：执行第一组动画
    animation.opacity(90).rotateX(-90).step();
    // 第4步：导出动画对象赋给数据对象储存
    _this.setData({
        animationData: animation.export()
    })
    // 第5步：设置定时器到指定时候后，执行第二组动画
    setTimeout(function() {
        // 执行第二组动画
        animation.opacity(1).rotateX(0).step();
        // 给数据对象储存的第一组动画，更替为执行完第二组动画的动画对象
        _this.setData({
            animationData: animation
        })
        //关闭
        if (currentStatu == "close") {
            _this.setData({
                showModalStatus: false,
				dbHeight:0,
				dtHeight:0,
				doHeight:0,
            });
        }
    }.bind(_this), 100)
    // 显示
    if (currentStatu == "open") {
        _this.setData({
            showModalStatus: true
        });
    }
    return typeof _fun == "function" && _fun();
}
/**************************************关于动画结束********************************* */

//计算弹框的盒子的高度, 并自适应高度和最高高度
function openDrawer(e, _this) {
    // if (!_this.data.dbHeight) {
    //     toast("加载中..", 2);
        showModel(_this, e.currentTarget.dataset.statu, function() {
            let query = wx.createSelectorQuery();
            setTimeout(function() {
                query.select('.drawer_content').boundingClientRect(function(rect) {
                    // if (!_this.data.dbHeight) {
                        _this.setData({
                            dbHeight: rect.height
                        })
                    // }
                }).exec();
                query.select('.drawer_title').boundingClientRect(function(rect) {
                    // if (!_this.data.dtHeight) {
                        _this.setData({
                            dtHeight: rect.height
                        })
                    // }
                }).exec();
                query.select('.btn_ok').boundingClientRect(function(rect) {
                    // if (!_this.data.doHeight) {
                        _this.setData({
                            doHeight: rect.height
                        })
                    // }
                    // wx.hideToast();
                }).exec();
            }, 350)
        });
    // } else {
    //     showModel(_this, e.currentTarget.dataset.statu);
    // }
    //计算弹出盒子的高度
}
/**
 * 
 * @param {*} data  formdata
 * @param {*} noCheckKeys  筛选掉不需要检查空值的属性
 * @param {*} hint  提示文案 ,为空则只返回值,不提示
 * 
 */
function checkFormNull(formData, noCheckKeys,hint){
      // 声明提示语
    // 循环遍历表单内容
    
    var filter = [];
    filter = noCheckKeys;
    for (var item in formData) {
        var fl = filter.indexOf(item);
        // console.log("是否在数组中:"+fl+"|"+item);
        if(fl!=-1){
            continue;
        }
        console.log(item+"====="+formData[item]+"----"+(!(formData[item] && formData[item].length > 0)|| formData[item] == 0));
        
        if (!(formData[item] && formData[item].length > 0)|| formData[item] == 0) {
            if(!hint){
                hint = "请完善表单";
            }
            break;
        }


    }
    // 判断，如果存在提示语，则提示用户端，存在漏填选项
    if (hint) {
        // wx.showModal({
        //     content: hint,
        //     showCancel: false,
        //     confirmText: '确定',
        //     confirmColor: '#000000',
        // })
        return false; // 未通过验证,返回false
    } else {
        // 反之，表单填写正常，返回true，执行后续操作
        return true;  // 通过验证，返回true
    }

}

/**
 * 关于toast开始*********************************************************
 */
/**
 * toast 提示
 * @param {*} title  文案
 * @param {*} icon  图标 不传不显示图标, 1=成功 2=loading
 */
function toast(title, icon,timer) {
    toastTimer(title,icon,timer?timer:1500);
}

/**
 * * toast 提示
 * @param {*} title  文案
 * @param {*} icon  图标 不传不显示图标, 1=成功 2=loading
 * @param {*} timer  显示时间 默认1500 1.5秒
 */
function toastTimer(title, icon,timer) {
    let ico = "none";
    if(icon==1){
        ico = "success";
    }else if(icon ==2 ) ico = "loading" 
    else ico = "none"

    wx.showToast({
        title: title, //标题
        icon: ico, //图标，支持"success"、"loading"
        // image: '../image/img.png',  //自定义图标的本地路径，image 的优先级高于 icon
        duration: timer?timer: 1500, //提示的延迟时间，单位毫秒，默认：1500
        mask: false, //是否显示透明蒙层，防止触摸穿透，默认：false
        success: function() {}, //接口调用成功的回调函数
        fail: function() {}, //接口调用失败的回调函数
        complete: function() {} //接口调用结束的回调函数
    })
}

//关于toast结束*********************************************************

// ---
/**
 * 获取指定 元素的高度
 * _this : this
 * elem 元素的id或者class
 * key : 存在data中
 * tims : 延迟毫秒数
 */
function seelctHeight(_this,elem,key,tims){
	seelctHeight(_this, elem, key, tims,0);
}
function seelctHeight(_this, elem, key) {
	seelctHeight(_this, elem, key, 0, 0);
}
/**
 * 获取指定 元素的高度
 * _this : this
 * elem 元素的id或者class
 * key : 存在data中
 * tims : 延迟毫秒数
 */
function seelctHeight(_this, elem, key, tims,outHeight) {
	let query = wx.createSelectorQuery();
	if (tims) {
		setTimeout(function () {
			query.select(elem).boundingClientRect(function (rect) {
				if (!_this.data[key]) {
					_this.setData({
						[key]: rect.height + (outHeight ? outHeight : 0)
					})
				}
			}).exec();
		}, tims)
	}else{
		query.select(elem).boundingClientRect(function (rect) {
			console.log(rect);
			if (!_this.data[key]) {
				_this.setData({
					[key]: rect.height + (outHeight ? outHeight : 0)
				})
			}
		}).exec();
	}
}

//
module.exports = {
    formatTime: formatTime,
    formatSeconds: formatSeconds,
    showModel: showModel, //弹窗动画
    openDrawer: openDrawer,
    toast: toast,
    seelctHeight: seelctHeight, //获取指定 元素的高度
    formatData:formatData,
    formatDate:formatDate,
    checkFormNull:checkFormNull
}